草庐IT

C++ 对和指针

全部标签

c++ - 正确初始化智能指针数组

对于这种情况:classA{//implementation};classB{public:B();~B();private:std::vector>_innerArray;};我应该在B()中做什么来创建一个具有有效状态的对象?我是否需要为数组中的每个A对象手动调用默认构造函数?我是否需要在~B()中做一些特别的事情?如果B类是糟糕设计的例子,请随意说出如何让它变得更好。谢谢。编辑所以,这是我真正需要的方案。因此,仅存储在A数组中的真实值和所有其他对象都用于存储连接。最简单的示例-A=点,B=通过选定点的线(或曲线),C=由线描述的平面。希望它能使问题更准确。

c++ - 结构指针的优先级队列

我知道有类似的线程,但在花了一个小时试图强制我的程序运行后,我决定寻求帮助。首先。我认为我很了解C++,因为我尝试了一些在PHP中非常简单(我最了解的编程语言)但在C++中非常复杂的东西(至少对我来说非常复杂)。所以我想创建结构指针的priority_queue。很明显,我需要创建自己的比较函数。所以我尝试了这段代码:#include#include#includeusingnamespacestd;typedefstructMI{intnr;intkoszt;booloperatorb.koszt;}}miasto,*miasto_wsk;intmain(){priority_que

c++ - 在指针 vector 中释放内存的正确方法? (C++)

我有一道作业题,其中有一个类Student,以及一个指向Student对象的指针vector,它是Student类中的一个成员字段:vectorvectorName;为了进行正确的(?)内存管理,我在Student类中这样声明了析构函数Student::~Student(){for(inti=0;i这是否真的正确地从堆中释放了内存,还是有更好的方法? 最佳答案 这主要取决于Student*引用的存储位置。如果一个Student*实例有它的个人学生列表,这些学生列表没有引用任何其他地方,那么你正在做的事情会产生许多悬空指针。当销毁st

c++ - 我可以将一个对象类转换为它在其中实现的接口(interface)指针吗?

我定义了一个接口(interface)类,如下所示。classIRecyclableObject{public:virtual~IRecyclableObject(){}virtualvoidrecycle()=0;virtualvoiddump()=0;virtualintgetRecycleTypeID()=0;};下面是我的CharacterAI类,它继承了另一个类并实现了上面的接口(interface)类。定义如下。classCharacterAI:publicharp::Character,publicharp::IRecyclableObject{public:Charac

C++ 继承 - 如何使用指向基类对象的指针访问子方法

我有一个处理继承的任务。我有一个Employee()基类,Manager()和Intern()继承自该基类。我的导师给了我们以下指示:在main()中声明一个员工指针数组并将它们初始化为以下记录:Manager("IT",100,"MF1","ML1")Manager("HR",50,"MF2","ML2")Intern("SIUE",0,"IF1","IL1")Intern("SLU",0,"IF2","IL2")然后我必须遍历并显示数组。他作为示例提供的输出显示必须调用Manager()和Intern()toString()方法,因为输出了与子类相关的特定信息。但是,在访问数组时,

c++ - C++ 中的链表使用引用而不是指针

假设我想创建一个不可修改的链表(即它只能被遍历,一旦最初创建就不能添加或删除任何节点)。这可以通过以下方式轻松实现:structListNode{intvalue;ListNode*nextNode;}我的问题是......是否可以使用引用而不是指针?structListNodeWithRefs{intvalue;ListNodeWithRefs&nextNode;}我不确定它是否会带来任何性能提升,但是......这个问题在编码时突然出现,目前我的回答是否,但我可能会遗漏一些东西。原则上,没有什么能阻止您像这样使用引用和构造列表元素:ListNodeWithRefs::ListNod

C++11 智能指针总是代替新建/删除?

在C++11中,我们是否应该始终使用unique_ptr或shared_ptr而不是new/delete?性能如何,智能指针是否慢得多? 最佳答案 与使用原始指针相比,unique_ptr没有(不应该)有任何运行时开销。shared_ptr确实有一些内存和时间开销(多少取决于实现)。如果您确实需要一些行为类似于shared_ptr的东西,那么这里的实际开销很容易为零(也就是说,您认为没有其他实现会更快或更多内存效率)。这并不是说您永远不会在代码中使用new/delete,但您不会一直这样做。

c++ - 如果加法表达式的第一个操作数可转换为指针和整数,选择哪种转换?

在下面的例子中,应该调用哪个转换函数?为什么要选择一个而不是另一个?structA{operatorint();operatorint*();};Ax;inti=x+1;编译器选择operatorint()..但为什么呢?以下是C++03中的一些相关引述:来自[expr.add]Foraddition,eitherbothoperandsshallhavearithmeticorenumerationtype,oroneoperandshallbeapointertoacompletelydefinedobjecttypeandtheothershallhaveintegraloren

Go指针探秘:深入理解内存与安全性

目录1.指针的基础1.1什么是指针?1.2内存地址与值的地址1.2.1内存中的数据存储1.2.2如何理解值的地址2.Go中的指针操作2.1指针类型和值2.1.1基本数据类型的指针2.1.2复合数据类型的指针2.2如何获取一个指针值2.3指针(地址)解引用3.深入理解指针3.1我们为什么需要指针?3.1.1提高程序性能3.1.2动态数据结构3.1.3与其他语言的比较3.2关于"引用"这个术语3.2.1引用与指针的区别4.Go指针的特性与限制4.1Go指针的特性4.1.1零值4.1.2不支持指针算术4.2Go指针的限制4.2.1不支持指针到整数的转换4.2.2不能获取内建数据类型的地址4.2.3安

c++ - 在 C++11 循环范围内使用对指针的引用作为序列

以下两段代码之间的唯一区别是引用的使用。我理解为什么第一个代码片段无法编译,并且正在寻求帮助以了解为什么第二个代码片段可以编译。第一个片段:inta[2][3]={0,1,2,3,4,5};for(autorow:a)for(autocolumn:row)cout上面的代码无法通过编译,因为'row'的类型是指向int的指针,这不是一个序列。第二个片段:inta[2][3]={0,1,2,3,4,5};for(auto&row:a)for(autocolumn:row)cout此代码编译。如果我正确理解auto的工作原理,“行”是对指向int的指针的引用。但是为什么这个引用可以被看作一